package com.parsec.sb.pattern.proxy.cgllib;

import com.parsec.sb.pattern.proxy.OriginalOperate;
import org.springframework.cglib.proxy.Enhancer;

/**
 * cglib可以直接代理类，jdk动态代理只能代理接口实现类。
 * cglib会继承目标对象，需要重写方法，所以目标对象不能为final类。
 */
public class CglibProxyPattern {
    public static void main(String[] args) {
        MethodInterceptorImpl methodInterceptorImpl = new MethodInterceptorImpl();

        //初始化加强器对象
        Enhancer enhancer = new Enhancer();
        //设置代理类
        enhancer.setSuperclass(OriginalOperate.class);
        //设置代理回调
        enhancer.setCallback(methodInterceptorImpl);

        //创建代理对象
        OriginalOperate operationProxy = (OriginalOperate) enhancer.create();
        //调用操作方法
        operationProxy.doSomething();
    }
}
